#ifndef MD5_H__
#define MD5_H__

//#pragma argsused    
typedef struct {    
	ULONG i[2]; /* number of _bits_ handled mod 2^64 */    
	ULONG buf[4]; /* scratch buffer */    
	unsigned char in[64]; /* input buffer */    
	unsigned char digest[16]; /* actual digest after MD5Final call */    
} MD5_CTX;    

#define MD5DIGESTLEN 16    

#define PROTO_LIST(list) list  

/*  
* MTS: Each of these assumes MD5_CTX is locked against simultaneous use.  
*/    
typedef void (WINAPI* PMD5Init) PROTO_LIST ((MD5_CTX *));    
typedef void (WINAPI* PMD5Update) PROTO_LIST ((MD5_CTX *, const unsigned char *, unsigned int));    
typedef void (WINAPI* PMD5Final )PROTO_LIST ((MD5_CTX *));    

string MD5A(const  char *pBuf,int nLen);
string MD5A(const  byte *pBuf,int nLen);

#endif